/*
 * @lc app=leetcode.cn id=345 lang=cpp
 *
 * [345] 反转字符串中的元音字母
 */

// @lc code=start
class Solution {
public:
    string reverseVowels(string s) {
        auto isVowel = [vowels = "aeiouAEIOU"s](char ch) 
        {
            return vowels.find(ch) != string::npos;
        };

        // 记录元音字母的位置, 再调换
        // vector<pair<int, char>> vowels;

        // for (int i = 0; i < s.size(); ++i) 
        // {
        //     if (isVowel(s[i])) 
        //     {
        //         vowels.emplace_back(i, s[i]);
        //     }
        // }
        // if(vowels.empty())
        // {
        //     return s;
        // }


        // for (auto it1 = vowels.begin(), it2 = vowels.end() - 1; it1 < it2; ++it1, --it2) 
        // {
        //     s[it1->first] = it2->second;
        //     s[it2->first] = it1->second;
        // }
        
        // 双指针, 直接遍历
        for(int i = 0, j = s.size() - 1; i < j; )
        {
            while(i < s.size() && !isVowel(s[i])){++i;}
            while(j < s.size() && !isVowel(s[j])){--j;}

            if(i < j)
            {
                // char temp = a[i];
                // s[i] = s[j];
                // s[j] = temp; 
                swap(s[i], s[j]);
                ++i;
                --j;
            }
        }

        return s;
    }
};
// @lc code=end

